This relates generally to using scatter/gather memory accesses.
In a scatter/gather memory access, the operating system delivers multiple discrete chunks of data in one operation from a file to separate, non-contiguous buffers in memory. Conversely, the scatter/gather memory access also writes data from non-contiguous buffers in one operation. In conventional scatter/gather memory access techniques, non-sequential accesses to memory are used via what is called a private memory. The private memory is not backed by system memory. Backing means there is no directory copy to memory. Accesses in private memory are coherent to a portion of the hardware but not visible to entire graphics processing unit (GPU) or system. No tags or addresses are used, in contrast to conventional cache accesses. The private memory is indexed and uses location based addressing.
One problem with private memory is that explicit software and application program interface level interfaces are needed to expose private memory to developers. Thus, private memory is generally only a viable solution in specialized applications like gaming or special purpose compute workloads. Since private memory does not use system memory, and this is the only memory used by most developers, it is impractical in most cases.
A private memory is exposed to a developer who copies from system memory into private memory. Then the operations, such as the applications, are run and the results from those operations are copied back into system memory to make the results visible to the rest of the system. Conventionally, the private memory is embedded in a chip such as a graphics processing unit and is only addressed through an application program interface.